package Interfaces;

import Datatypes.DataCategoria;
import Datatypes.DataComentario;
import Datatypes.DataCompra;
import Datatypes.DataEstadistica;
import Datatypes.DataJuego;
import Datatypes.DataJuegoVersion;
import Datatypes.DataNotificacion;
import Datatypes.DataPerfil;
import Datatypes.DataPuntaje;
import Datatypes.DataReclamo;
import Datatypes.DataVersion;
import Datatypes.DataVersionDesarrollador;
import JBeans.ArbolComentariosBean;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService(name = "TPlayMarket", targetNamespace = "http://www.tplaymarket.com")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public interface IWeb {
    
    @WebMethod
    public List<Integer> totalPuntajesJuego(String nomJuego) throws Exception;
    
    @WebMethod
    public List<DataPuntaje> getPuntajesJuego(String nomJuego) throws Exception;
    
    @WebMethod
    public List<DataPuntaje> getPuntajesCliente(String nickCliente) throws Exception;
    
    @WebMethod
    public void ingresarPuntaje(DataPuntaje puntaje) throws Exception;
    
    @WebMethod
    public ArbolComentariosBean getArbolBean(String nombreJuego) throws Exception;
    
    @WebMethod
    public List<String> listarNomJuegos() throws Exception;
    
    @WebMethod
    public List<String> listarNomClientes()throws Exception;
    
    @WebMethod
    public List<DataComentario> listarComentarios(String juego) throws Exception;
    
    @WebMethod
    public void realizarComentario(DataComentario comentario) throws Exception;
    
    @WebMethod
    public void responderComentario(DataComentario comentario) throws Exception;
    
    public List<DataCategoria> listarCategorias()throws Exception;
    
    @WebMethod
    public List<String> listarDesarrolladores()throws Exception;
    
    @WebMethod
    public Integer altaDeJuegoWeb(DataJuego Juego, byte[] imagen, String nombre_imagen) throws Exception;

    
    //Zona Pelu Potter, travas como Dieguito abstenerce
    
    @WebMethod
    public void altaCategoriaReclamo(DataCategoria dc) throws Exception;  
    
    @WebMethod
    public List<DataCategoria> listarCategoriasReclamos() throws Exception;
    
    @WebMethod
    public void altaReclamo(DataReclamo dr) throws Exception;
    
    @WebMethod
    public List<DataReclamo> verReclamos(Integer cod) throws Exception;
    
    @WebMethod
    public List<String> listarJuegosXCategoria(String categoria)throws Exception;
    
    @WebMethod
    public List<String> listarJuegosXIDCategoria(Integer idCat) throws Exception;
    
    @WebMethod
    public List<DataCategoria> listarCategoriasDeJuego(Integer codigo)throws Exception;
    
    @WebMethod
    public List<DataPerfil> getClientesCompranJuego(Integer codigo)throws Exception;
    
    @WebMethod
    public List<DataJuego> listarJuegosAprobados() throws Exception;    
    
    @WebMethod
    public List<DataJuego> buscarJuegos(String texto) throws Exception;
    
    @WebMethod
    public List<DataJuego> ordenarJuegosXCompras(List<DataJuego> lj)throws Exception;
    
    @WebMethod
    public List<DataJuego> filtrarJuegos(List<DataJuego> lj, String filtro);
    
    @WebMethod
    public DataEstadistica obtenerEstadisticaPIE(String nickD) throws Exception;
    
    @WebMethod
    public DataEstadistica obtenerEstadisticaLINE(String nickD) throws Exception;
    
    @WebMethod
    public List<DataJuego> getJuegosDesarrollador(String nick) throws Exception;
    
    
    
////////////////////////////////////////////////////////////////////////////////
    
    @WebMethod
    public DataJuego elegirJuego(String juego) throws Exception;
    
    @WebMethod
    public DataJuego elegirJuegoXCodigo(Integer codigo)throws Exception;
    
    @WebMethod
    public List<DataJuego> listarJuegos()throws Exception;
    
    @WebMethod
    public void registrarCompra(DataCompra compra) throws Exception;
    
    @WebMethod
    public Integer ingresarCategoria(String categoria) throws Exception;   
    
    @WebMethod
    public List<DataJuegoVersion> listarJuegosVersiones(String nickDesarrollador) throws Exception;
    
    @WebMethod
    public List<DataJuego> obtenerJuegosPopulares() throws Exception;    
    
    @WebMethod
    public Boolean existeJuego(String nombre_juego)throws Exception;
    
    @WebMethod
    public void insertarImagen(Integer codigo_juego , String path) throws Exception;
    /**
     * Desarrollador: Jonathan Franco<br>
     * Operacion del Caso de Uso 1.<br>
     * Verifica que se puede ingresar los nuevos datos.<br>
     * Retorna true si los datos son validos o false en caso contrario.
     *
     * @return Boolean
     */
    @WebMethod
    public Boolean comprobarUsuario(String nick, String email) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Operacion del Caso de Uso 1.<br>
     * Da de alta los nuevos datos en el sistema.<br>
     * 
     */
    @WebMethod
    public void darAltaPerfil(DataPerfil dp) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Operacion del Caso de Uso 2.<br>
     * Obtiene los datos de un perfil con el nick dado.<br>
     * Si hay un error lanza una excepción.<br>
     * Si hay un error lanza una excepción.<br>
     * El parametro cargarImagen indica desde si se quiere cargar el binario de la imagen.
     * 
     * @return DataPerfil
     * @throws Exception
     */
    @WebMethod
    public DataPerfil obtenerPerfil(String nick, Boolean cargarImagen) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Obtiene los datos de un perfil con el email dado.<br>
     * Si hay un error lanza una excepción.<br>
     * El parametro cargarImagen indica desde si se quiere cargar el binario de la imagen.
     * 
     * @return DataPerfil
     * @throws Exception
     */
    @WebMethod
    public DataPerfil obtenerPerfilXEmail(String email, Boolean cargarImagen) throws Exception;
    
    /**
     * 
     * @throws Exception 
     */
    @WebMethod
    public void modificarPerfil(String oldnick, String oldemail, DataPerfil dp) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Esta funcion chequea que el mail y la contraseña sean correctos retornando<br>
     * true si son validos o false en caso contrario.
     * 
     * @param email
     * @param password
     * @return Boolean
     * @throws Exception 
     */
    @WebMethod
    public Boolean comprobarPassword(String email, String password) throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Retorna la lista de nicks del sistema.
     * 
     * @return List(String)
     * @throws Exception 
     */
    @WebMethod
    public List<String> getNicks() throws Exception;
    
    /**
     * Desarrollador: Jonathan Franco<br>
     * Retorna la lista de emails del sistema.
     * 
     * @return List(String)
     * @throws Exception 
     */
    @WebMethod
    public List<String> getEmails() throws Exception;
    
    @WebMethod
    public List<String> listarPerfiles()throws Exception;
    
    @WebMethod
    public DataPerfil seleccionarPerfil(String nick, String email)throws Exception;
    
    @WebMethod
    public List<String> listarClientes()throws Exception;
    
    @WebMethod
    public List<String> listarJuegosComprados(String nick_cliente) throws Exception;
    
    @WebMethod
    public Boolean clienteComproJuego(String nick_cliente, Integer codigo_juego) throws Exception;
    
    @WebMethod
    public List<DataJuegoVersion> listarJuegosxVersion() throws Exception;
    
    @WebMethod
    public void altaVersionWeb(byte[] version, Double numVersion, Integer codigo_juego, String nombre_archivo) throws Exception;
    
    @WebMethod
    public List<DataVersion> listarPendientes() throws Exception;
    
    @WebMethod
    public void altaAprobada(DataVersion dv) throws Exception;
    
    @WebMethod
    public void altaRechazada(DataVersion dv, String motivo) throws Exception;
    
    @WebMethod
    public List<DataVersion> listarAprobadas(String juego) throws Exception;
    
    @WebMethod
    public DataVersion obtenerUltimaVersion (Integer codigo_juego) throws Exception;
    
    @WebMethod
    public DataVersionDesarrollador listarVersionesDesarrollador(String Desarrollador) throws Exception;
    
    @WebMethod
    public Boolean tieneAprobada(Integer codigo_juego) throws Exception;
    /*notificaciones*/
    @WebMethod
    public void notificarCliente(String nick_cliente, Integer codigo_juego) throws Exception;
    @WebMethod
    public List<DataNotificacion> obtenerNotificacionesNuevas(String nick_cliente) throws Exception;
    @WebMethod
    public void borrarNotificacion(Integer id) throws Exception;
    /*fin notificaciones*/
    @WebMethod
    public List<String> getArchivoDeJuego(Integer codigo_juego) throws Exception;
    
    //Manejo de la base
    @WebMethod
    public void cargarDatosDePrueba(Boolean force) throws Exception;
    @WebMethod
    public void limpiarBD() throws Exception;
    @WebMethod
    public Boolean esVaciaBD() throws Exception;
    @WebMethod
    public void ingresarRegistro(String ip, String navegador, String url) throws Exception;
    
}
